package com.xdb.presistence.index;

import java.util.List;
import java.util.Map;

import com.xdb.presistence.metadata.TableMetadata;

public interface XDBIndex {
	/**
	 * 获取真实的表对象元信息
	 * @return
	 */
	TableMetadata getTableMetadata();
	/**
	 * 清空索引
	 * @return
	 */
	int truncate();
	/**
	 * 新增加一个索引行
	 * @param row
	 * @return
	 */
	int insert(XDBIndexRow row);
	/**
	 * 删除索引行，在调用该方法前需要先查询，然后根据关键字条件进行处理后，返回需要删除的行
	 * @param keywords
	 * @return
	 */
	int delete(XDBIndexRow... newRows);
	/**
	 * 更新一个表的记录触发了对一个或多个索引值得修改;不过是否考虑在更新时直接插入新的索引记录，原索引不做管理
	 * @param newRows
	 * @return
	 */
	int update(XDBIndexRow... newRows);
	/**
	 * 根据关键字条件
	 * @param keywords
	 * @return
	 */
	List<XDBIndexRow> select(Map<String, String> keywords);
	/**
	 * 对对应的索引进行整理，主要是清除掉无效索引记录
	 * @return
	 */
	int cleanUp();
}
